package com.cw.jeeyt.dao.intf.security;

import java.util.List;

import com.cw.jeeyt.dao.domain.security.SecurityUserModel;
import com.cw.jeeyt.dao.model.security.SecurityUserDo;
import com.cw.jeeyt.dao.query.security.SecurityUserQuery;
import com.cw.lang.mybatis.dto.PageInfo;

/**
 * 用户信息 dao数据库操作接口
 *
 * @author chenw
 * @version 1.0.0
 */
public interface SecurityUserDao {

    /**
     * 删除用户信息
     *
     * @param user
     */
    void delete(SecurityUserModel user);

    /**
     * 修改用户信息
     *
     * @param user
     */
    Integer update(SecurityUserModel user);

    /**
     * 根据用户名称查询用户信息
     *
     * @param username
     * @return
     * @throws Exception
     */
    SecurityUserModel findUserByName(String username);

    /**
     * 根据主键查询用户信息
     *
     * @param id 主键id
     * @return 用户信息
     */
    SecurityUserModel getById(Long id);

    /**
     * 根据主键查询用户信息
     *
     * @param id
     * @return
     * @throws Exception
     */
    SecurityUserModel getUserVoById(Long id);

    /**
     * 新增用户信息
     *
     * @param user
     * @return 整数
     */
    Integer insert(SecurityUserModel user);

    /**
     * 查询所有用户信息
     *
     * @return 用户信息集合
     */
    List<SecurityUserModel> queryUserList();

    /**
     * 分页查询用户信息
     *
     * @param user 查询条件
     * @param startNum 开始条数
     * @param pageSize 每页长度
     * @return 用户信息集合
     */
    PageInfo<SecurityUserModel> queryByPage(SecurityUserModel user, Integer startNum, Integer pageSize);

    /**
     * 根据机构ID获取用户列表信息
     *
     * @param orgId
     * @return
     */
    List<SecurityUserDo> getUserListByOrgId(Long orgId);

    /**
     * 根据角色ID获取用户列表
     *
     * @param roleId
     * @return
     */
    List<SecurityUserModel> getUserListByRoleId(Long roleId);

    /**
     * 更新用户状态
     *
     * @param account
     * @param userState
     */
    void updateUserState(String account, String userState);

    /**
     * 更新用户机构ID
     *
     * @param user
     * @return
     */
    int updateUserDefaultOrgId(SecurityUserModel user);

    /**
     * 根据账号查询用户信息
     *
     * @param account
     * @return
     */
    SecurityUserDo getUserByAccount(String account);

    /**
     * 根据机构ID和类型查询用户列表信息
     */
    List<SecurityUserDo> getUserListByDefaultOrgIdAndType(Long defaultOrgId, String type);

    /**
     * 检查登录用户账号密码
     *
     * @param account
     * @param password
     * @return
     */
    SecurityUserModel checkUser(String account, String password);

    /**
     * 根据条件查询用户信息
     *
     * @param user
     * @return
     */
    List<SecurityUserModel> queryListByCondition(SecurityUserModel user);

    /**
     * 根据userid查询用户信息
     *
     * @param userId
     * @return
     */
    SecurityUserDo getUserByUserId(String userId);

    /**
     * 修改用户密码
     *
     * @param securityUser
     */
    void updateUserPassword(SecurityUserModel securityUser);

    /**
     * 查询用户信息
     *
     * @param securityUserQuery 条件
     * @return List<SecurityUserDo>
     */
    List<SecurityUserDo> selectByExample(SecurityUserQuery securityUserQuery);

    /**
     * 新增用户信息
     *
     * @param securityUser 条件
     * @return int>
     */
    int insertBySelective(SecurityUserDo securityUser);

    /**
     * 修改用户信息
     *
     * @param securityUser
     * @return
     */
    int updateBySelective(SecurityUserDo securityUser);
}
